package com.skycong.hello77.activity.common;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.skycong.hello77.R;
import com.skycong.hello77.activity.common.networkvalidator.NetworkValidator;

/**
 * 无数据时空布局
 * Created by Kiki on 2018/5/10.
 */

public class LoadFrameLayout extends RelativeLayout implements View.OnClickListener {
    public static final int START = 0;//开始刷新
    public static final int AFTER = 1;//结束刷新

    private TextView mMsgView;//没有数据时提示字
    private View mNetworkSetBtn;//去设置网络按钮
    private LoadViewListener listener;//接口
    private int number,state;



    public LoadFrameLayout(Context context) {
        super(context);
    }

    public LoadFrameLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    @Override
    public void onClick(View v) {

    }
    /*
    * onFinishInflate 当View中所有的子控件均被映射成xml后触发
    * 也就是会在Activity中调用setContentView之后就会调用onFinishInflate这个方法，
    * 这个方法就代表自定义控件中的子控件映射完成了，
    * 然后可以进行一些初始化控件的操作
    * */

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        //从一个Context中，获得一个布局填充器，这样你就可以使用这个填充器来把xml布局文件转为View对象了。
        //xml布局文件转为View对象,获得对象并且做一些修改或者其他动态设置
        LayoutInflater.from(getContext()).inflate(R.layout.blank_view_no_data,this);
        //将xml布局转化成view，进行动态的设值
        setBackgroundResource(R.color.white_L);
        mMsgView = (TextView) findViewById(R.id.msg);
        mNetworkSetBtn = findViewById(R.id.network_set);
        mNetworkSetBtn.setOnClickListener(this);
    }

    /**
     * 数据列表条数的更新
     * @param number
     */
    public void setNumber(int number){
        this.number = number;
        refresh();
    }

    /**
     * 状态的更新
     * @param state
     */
    public void setState(int state){
        this.state = state;
        refresh();
    }
    /**
     * 刷新UI
     * 1,states == START，隐藏刷新（之前显示正在加载，现在正在加载代码在activity设置）
     * 2，states == AFTER 并且数据为空，显示UI
     */
    private void refresh() {
        setVisibility(GONE);
        if(listener == null){
            return;
        }
        if(state !=AFTER || number !=0){
            return;
        }
        //判断网络是否连接
        if(!NetworkValidator.isNetworkConnected(getContext())){
            showNotNetworkView();
        }else {
            showNotDataView();
        }
    }

    /**
     * 空数据UI
     */

    private void showNotDataView() {
        setVisibility(View.VISIBLE);
        mMsgView.setText(listener.getEmptyMsg());
        Drawable drawable =listener.getEmptyImage();
        if(drawable == null){
            drawable = ResourcesManager.getNoBoundsDrawable(R.mipmap.jyzhixiao_quehuo_kong);
        }
        mMsgView.setCompoundDrawables(null,drawable,null,null);
        mNetworkSetBtn.setVisibility(View.GONE);
    }

    /**
     * 无网络UI
     */
    private void showNotNetworkView() {
        setVisibility(View.VISIBLE);
        mMsgView.setText(R.string.network_err_msg);
        mMsgView.setCompoundDrawables(null,ResourcesManager.getDrawable(R.mipmap.kongjiemian_wuwangluo),null,null);
        mNetworkSetBtn.setVisibility(View.VISIBLE);
    }

    //网络接口
    public interface LoadViewListener {
        void onNetworkSet();//设置网络接口方法

        String getEmptyMsg();//空布局提示文字

        Drawable getEmptyImage();//空布局提示图片
    }

    //改变状态接口
    public interface LoadViewChangeState {
        void changeState(int states);//改变状态接口方法
    }
}
